home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / CONTRSRC.ZIP / SRC / MORFLAME / MORGMAC.INC < prev    next >
Encoding:
Text File  |  1994-10-30  |  10.1 KB  |  343 lines

  1. ;----------------------------------------------------------------------
  2. ; Unité MORGMAC : Macro Graphiques & autres
  3. ; Programmation : Morflame [TdV]
  4. ;------------------------------------------------------------------------------
  5. SW_PAGES MACRO
  6. LOCAL m1        
  7.         cmp     byte ptr SW, 0
  8.         jnz     @F
  9.         SET_ACTIVE_PAGE 0
  10.         SET_VISUAL_PAGE 1
  11.         mov     byte ptr SW, 1
  12.         jmp     m1
  13. @@:     SET_ACTIVE_PAGE 1
  14.         SET_VISUAL_PAGE 0
  15.         mov     byte ptr SW, 0
  16. m1:
  17. ENDM
  18. ;------------------------------------------------------------------------------
  19. CPU_TIME MACRO lum
  20. LOCAL suite        
  21.         cmp     cpu_flag, 1
  22.         jnz     suite
  23.         mov     dx, 3C8h
  24.         xor     al, al
  25.         out     dx, al
  26.         inc     dl
  27.         mov     al, lum
  28.         out     dx, al
  29.         out     dx, al
  30.         out     dx, al
  31. suite:
  32. ENDM
  33. ;----------------------------------------------------------------------
  34. MPUSH   MACRO reg1:REQ,reg2:VARARG   ; Vive Y.Roggeman/Greg & ses Macros
  35.         push reg1                    ; recursives !!!!!!! yahouuuuu !!!
  36.         IFNB <reg2>
  37.         MPUSH reg2
  38.         ENDIF
  39.         ENDM
  40. ;----------------------------------------------------------------------
  41. MPOP    MACRO reg1:REQ,reg2:VARARG   ; bis bis !!!
  42.         IFNB <reg2>                  ; type brol = record....
  43.         MPOP reg2                    ; donc ça fait 20 bytes !!!
  44.         ENDIF                        ; donc 1 word ....
  45.         pop reg1                     ; brol je dis struct !!!
  46.         ENDM
  47. ;----------------------------------------------------------------------
  48. ModeSave BYTE ?
  49. Free_Keyboard MACRO         
  50.          mov     ax,40h              ; !!! Vider buffer clavier !!! ;-)
  51.          mov     es,ax
  52.          mov     ax,es:[001ah]
  53.          mov     es:[001ch],ax
  54. ENDM
  55. ;----------------------------------------------------------------------
  56. Reset_Cursor MACRO
  57.         mov     ah, 01h
  58.         mov     cx, 0506h
  59.         int     10h
  60. ENDM
  61. ;----------------------------------------------------------------------
  62. No_Cursor MACRO
  63.         mov     ah, 01h
  64.         mov     cx, 0FF00h
  65.         int     10h
  66. ENDM
  67. ;----------------------------------------------------------------------
  68. ClearText MACRO color
  69.         mov     ax, 0600h               ; Scroll screen service
  70.         mov     bh, color               ; Menu display attribute
  71.         sub     cx, cx                  ; From row 0, col 0
  72.         mov     dh, 25                  ;   to bottom row,
  73.         mov     dl, 79                  ;   rightmost column
  74.         int     10h                     ; Clear entire screen
  75. ENDM
  76. ;----------------------------------------------------------------------
  77. Init13h MACRO
  78.         mov ax,13h
  79.         int 10h
  80. ENDM
  81. ;----------------------------------------------------------------------
  82. CloseVideo MACRO
  83.         mov     ax, 3h
  84.         int     10h
  85. ENDM
  86. ;----------------------------------------------------------------------
  87. FillScreen MACRO color
  88. ; remplit l'écran avec une couleur donnée 
  89.            mov     ax,0A000h
  90.            mov     es,ax
  91.            xor     di,di
  92.            mov     al,color
  93.            mov     ah,color
  94.            mov     cx,32000
  95.            rep     stosw
  96.            pop     ax
  97.            pop     cx
  98.            pop     es
  99. ENDM
  100. ;----------------------------------------------------------------------
  101. WAITVRT MACRO 
  102. local wait_for_vbl
  103.     
  104.          push    fs
  105.          
  106.          LSFS    _DATA, ax
  107. wait_for_VBL:                       ; wait for Sync Flag
  108.          cmp     fs:_SyncFlag,1
  109.          jne      wait_for_VBL
  110.          mov     fs:_SyncFlag,0
  111.          
  112.          pop     fs    
  113. ENDM
  114. ;----------------------------------------------------------------------
  115. WAITHRT MACRO 
  116. local vrt, novrt        
  117.     mov     dx,3dah
  118. VRT:
  119.     in      al,dx
  120.     test    al,1
  121.     jnz     VRT         ; attend que le 'vertical retrace' démarre 
  122. NOVRT:
  123.     in      al,dx
  124.     test    al,1
  125.     jz      NOVRT       ; attend que le 'vertical retrace' s'arrête
  126. ENDM
  127. ;----------------------------------------------------------------------
  128. VGADETECT MACRO
  129. _TEXT ENDS
  130. _DATA2 SEGMENT
  131. NoVga BYTE 'Sorry dude, you need a vga to run this ...',10,13,'$'
  132. Vgaok BYTE 'VGA detected',10,13,'$'
  133. _DATA2 ENDS
  134. _TEXT SEGMENT
  135. ;-------- Routine de détection ---------
  136.           xor     bx,bx                ;- VGA Detect -
  137.           mov     ax,01a00h
  138.           int     10h
  139.           cmp     bl,7
  140.           jc      @F
  141.           cmp     bl,00dh
  142.           jc      VGA_Ok
  143. @@:       lea     dx,NoVga             ; Sorry You've not...
  144.           mov     ah,9
  145.           int     21h
  146.           @EXIT
  147. VGA_Ok:   lea     dx,Vgaok
  148.           mov     ah,9
  149.           int     21h
  150. ENDM
  151. ;----------------------------------------------------------------------
  152. PC386DETECT MACRO
  153. ;- Processor Detect - (C) Bible PC
  154. _TEXT ENDS
  155. _DATA2 SEGMENT
  156. No386 BYTE 'Sorry dude, you need a 386 to run this ',10,13,'$'
  157. Pc386ok BYTE '386 or better detected','$'
  158. _DATA2 ENDS
  159. _TEXT SEGMENT
  160.          xor     ax,ax                ; Fixer AX sur 0
  161.          push    ax                   ; et placer sur la pile
  162.          popf                         ; Retirer de la pile comme reg. de flags
  163.          pushf                        ; Replacer sur la pile
  164.          pop     ax                   ; et ramener dans AX
  165.          and     ax,0f000h            ; Annuler tous les bits sauf les 4 sup.
  166.          cmp     ax,0f000h            ; bits 12 à 15 sont-ils tous à 1 ?
  167.          je      @F                   ; --> Beurk XT : EXIT
  168.          mov     ax,07000h            ; 286 ou 386
  169.          push    ax                   ; Placer la valeur 07000h sur la pile
  170.          popf                         ; Retirer comme registre de flags
  171.          pushf                        ; et replacer sur la pile
  172.          pop     ax                   ; Ramener dans le registre AX
  173.          and     ax,07000h            ; Masquer tous les bits sauf 12 à 14
  174.          jne     pc386_Ok             ; --> Ok 386
  175. @@:      lea     dx,No386             ; désolé....
  176.          mov     ah,9
  177.          int     21h
  178.          @EXIT
  179. pc386_Ok:lea     dx,Pc386ok
  180.          mov     ah,9
  181.          int     21h
  182. ENDM
  183. ;----------------------------------------------------------------------
  184. ;Write MACRO text
  185. ; LOCAL C
  186. ;.DATA
  187. ;%C   BYTE &text&,"$"
  188. ;.CODE         
  189. ;         lea     dx, C
  190. ;         mov     ah, 9
  191. ;         int     21h
  192. ;ENDM
  193. ;----------------------------------------------------------------------
  194. ;Writeln MACRO text
  195. ; LOCAL C
  196. ;.DATA
  197. ;%C   BYTE &text&,10,13,"$"
  198. ;.CODE
  199. ;         lea     dx, C
  200. ;         mov     ah, 9
  201. ;         int     21h
  202. ;ENDM
  203. ;----------------------------------------------------------------------
  204. GoodBye MACRO
  205. _TEXT ENDS
  206. _DATA2 SEGMENT
  207. Bye BYTE 'Coding : Morflame [TDV] (100% asm) ',13,10
  208.     BYTE 13,10,'C''you soon !!',13,10,'$'
  209. _DATA2 ENDS
  210. _TEXT SEGMENT
  211.          lea     dx,Bye
  212.          mov     ah,9
  213.          int     21h
  214. ENDM
  215. ;----------------------------------------------------------------------
  216. ClearTextFast MACRO
  217. ; efface l'écran sans interruption         
  218.          push   es
  219.          mov    ax, 0B800h
  220.          mov    es, ax
  221.          mov    cx, 80*25*2
  222.          mov    ax, 00h
  223.          rep    stosb
  224.          pop    es
  225. ENDM
  226. ;----------------------------------------------------------------------
  227. Clrscr MACRO
  228. ; efface l'écran et positionne le curseur en haut à gauche
  229.  ClearText 0
  230.          mov    ah, 2h
  231.          mov    bh, 1
  232.          xor    dx, dx
  233.          int    10h
  234. ENDM
  235. ;----------------------------------------------------------------------
  236. Save_Mode MACRO
  237. ; sauve le mode actif         
  238.          mov    ah, 0fh
  239.          int    10h
  240.          mov    ModeSave, al
  241. ENDM
  242. ;----------------------------------------------------------------------
  243. Restore_Mode MACRO
  244. ; restore le mode sauvé par Save_Mode
  245.          mov    al, ModeSave
  246.          xor    ah, ah
  247.          int    10h
  248. ENDM
  249. ;----------------------------------------------------------------------
  250. LOAD_PALETTE MACRO PAL
  251.         mov     cx, 0
  252.         xor     si, si
  253. bcl:    push    cx
  254.         push    cx
  255.         push    word ptr &PAL&[si]
  256.         push    word ptr &PAL&[si+2]
  257.         push    word ptr &PAL&[si+4]
  258.         call    SET_DAC_REGISTER
  259.         add     si, 6
  260.         pop     cx
  261.         inc     cx
  262.         cmp     cx, 256
  263.         jl      bcl
  264. ENDM
  265. ;----------------------------------------------------------------------
  266. LOAD_PAL MACRO PAL
  267. LOCAL bcl        
  268.         mov     dx, 3C8h
  269.         mov     ax, 0
  270.         xor     si, si
  271. bcl:    out     dx, al
  272.         inc     dl
  273.         push    ax
  274.         mov     al, byte ptr &PAL&[si]
  275.         out     dx, al
  276.         mov     al, byte ptr &PAL&[si+1]
  277.         out     dx, al
  278.         mov     al, byte ptr &PAL&[si+2]
  279.         out     dx, al
  280.         pop     ax
  281.         dec     dl
  282.         add     si, 3
  283.         inc     ax
  284.         cmp     ax, 256
  285.         jl      bcl
  286. ENDM
  287. ;----------------------------------------------------------------------
  288. PALETTE_BLEUE MACRO
  289.         mov     dx, 3C8h
  290.         mov     ax, 0
  291.         xor     si, si
  292. bcl:    out     dx, al
  293.         inc     dl
  294.         mov     bx, ax
  295.         shr     bx, 2
  296.         push    ax
  297.         mov     al, 0
  298.         out     dx, al
  299.         mov     al, 0
  300.         out     dx, al
  301.         mov     al, bl
  302.         out     dx, al
  303.         pop     ax
  304.         dec     dl
  305.         inc     ax
  306.         cmp     ax, 257
  307.         jl      bcl
  308. ENDM
  309. ;----------------------------------------------------------------------
  310. PALETTE_BLEUE2 MACRO
  311.         mov     dx, 3C8h
  312.         xor     ax, ax 
  313.  
  314.         xor     si, si
  315. bcl:    
  316.         out     dx, al
  317.         inc     dl
  318.         
  319.         mov     bx, ax
  320.         
  321.         shr     bx, 3
  322.         add     bx, 32                     
  323.         
  324.         push    ax
  325.         
  326.         mov     al, 0
  327.         out     dx, al
  328.         
  329.         mov     al, 0
  330.         out     dx, al
  331.         
  332.         mov     al, bl
  333.         out     dx, al
  334.         
  335.         pop     ax
  336.         
  337.         dec     dl
  338.         inc     ax
  339.         cmp     ax, 257
  340.         jl      bcl
  341. ENDM
  342. ;----------------------------------------------------------------------
  343.